<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8" />
		<title></title>
	</head>
	<body>
		<script>
			// 将https://123.jpg替换为123.jpg,要求必须https前缀和jpg后缀
			// {
			// 	let str = `

			// 	`
			// 	let reg = /https:(\/\/.+\.jpg)/;
			// }
			// 匹配时间，2019/10/04,2019-10-04
			// {
			// 	let str = `
			// 			2019/10/04,
			// 			2019-10-04,
			// 			2019-10004,
			// 			2019*10-04,
			// 			20199/10/04
			// 		`
			// 	let reg = /\d{4}[/-]\d{2}[/-]\d{2}/;
			// }
			// 3、字面量正则
			// {
			// 	let str = `
			// 		If you're going to san francisco
			// 		Be sure to wear some flowers in your hair
			// 		If you're going to san francisco
			// 		You're gonna meet some gentle people there
			// 		For those who come to san francisco
			// 		Summertime will be a love in there
			// 	`
			// 	let reg = /\bto\b/g;
			// 	str = str.replace(reg,'To');
			// 	console.log(str);
			// }
			// 4、构造函数正则,记得写两个\\
			// {
			// 	let str = `
			// 		If you're going to san francisco
			// 		Be sure to wear some flowers in your hair
			// 		If you're going to san francisco
			// 		You're gonna meet some gentle people there
			// 		For those who come to san francisco
			// 		Summertime will be a love in there
			// 	`
			// 	let reg = new RegExp('\\bto\\b','g');
			// 	str = str.replace(reg,'To');
			// 	console.log(str);
			// }
			// 笔记: g全文i忽略大小写m多行
			// 5、元字符[],表示或
			// {
			// 	let str = `
			// 		a1b2c3d4
			// 	`
			// 	let reg = /[abc]/g;
			// 	str = str.replace(reg,'X');
			// 	console.log(str);
			// }
			// 6、元字符^,表示取反
			// {
			// 	let str = `a1b2c3d4`
			// 	let reg = /[^abc]/g;
			// 	str = str.replace(reg,'X');
			// 	console.log(str);
			// }
			// 7、范围类
			// {
			// 	let str = `a1b2c3d4E5`
			// 	let reg = /[a-zA-Z]/g;
			// 	str = str.replace(reg,'X');
			// 	console.log(str);
			// }
			// 8、范围类横线，横线在a-z中间是范围的意思，在a-z外面是横线的意思
			// {
			// 	let str = `2019-01-01`
			// 	let reg = /[0-9-]/g;
			// 	str = str.replace(reg,'X');
			// 	console.log(str);
			// }
			// 预定义类笔记: .除回车换行的所有字符
			// \d 数字字符[0-9]
			// \D 非数字字符
			// \s 空白符
			// \S 非空白符
			// \w 单词字符，字母，数字下划线
			// \W 非单词字符
			// 边界笔记
			// ^ 以xxx开始
			// $ 以xxx结束
			// \b 单词边界
			// \B 非单词边界
			// 9、m的使用
			// {
			// 	let str = `@123\n@456\n@789`
			// 	let reg = /^@\d/g;
			// 	str = str.replace(reg,'X');
			// 	console.log(str);
			// }
			// 量词的笔记
			// ? 出现零次或一次，最多出现一次
			// + 出现一次或多次，最少出现一次
			// * 出现零次或多次，任意次
			// {n} 出现n次
			// {n,m} 出现n到m次
			// {n,} 至少出现n次
			// 贪婪模式，尽可能匹配多，非贪婪模式，尽可能匹配少
			// {
			// 	let str = `12345678`
			// 	let reg = /\d{3,6}/g;
			// 	str = str.replace(reg,'X');
			// 	console.log(str);
			// }
			// {
			// 	let str = `12345678`
			// 	let reg = /\d{3,6}?/g;
			// 	str = str.replace(reg,'X');
			// 	console.log(str);
			// }
			// 分组
			// {
			// 	let str = `a1b2c3d4`
			// 	let reg = /([a-z]\d){3}/g;
			// 	str = str.replace(reg,'X');
			// 	console.log(str);
			// }
			// 分组,采用或
			// {
			// 	let str = `LeeYaMaster`
			// 	let reg = /LeeYa|Master/g;
			// 	str = str.replace(reg,'X');
			// 	console.log(str);
			// }
			// {
			// 	let str = `LeeYaster,LeeMaster`
			// 	let reg = /Lee(Ya|Ma)ster/g;
			// 	str = str.replace(reg,'X');
			// 	console.log(str);
			// }
			// 反向引用
			// 2015-12-25=>12/25/2015
			// {
			// 	let str = `2015-12-25`
			// 	let reg = /(\d{4})-(\d{2})-(\d{2})/g;
			// 	str = str.replace(reg,'$2/$3/$1');
			// 	console.log(str);
			// }
			// 忽略分组
			// {
			// 	let str = `2015-12-25`
			// 	let reg = /(?:\d{4})-(\d{2})-(\d{2})/g;
			// 	reg.test(str)
			// 	console.log(RegExp.$1);
			// 	console.log(RegExp.$2);
			// 	console.log(RegExp.$3); // 为空
			// }
			// 正向后顾，负向后顾，JS不支持
			// {
			// 	let str = `a2*3v414`;//数字也属于单词字符
			// 	let reg = /\w(?=\d)/g; //判断单词后，是不是有数字，如果有，那么匹配到单词(不匹配数字，如果要匹配数字的话，那么就按照正常写法)
			// 	str = str.replace(reg,'X');
			// 	console.log(str);
			// }
			// {
			// 	let str = `a2*3v414`;//数字也属于单词字符
			// 	let reg = /\w(?!\d)/g; //同上，不过是取反
			// 	str = str.replace(reg,'X');
			// 	console.log(str);
			// }
			// test()方法
			// {
			// 	let str = `a`;//数字也属于单词字符
			// 	let reg = /\w/g; //同上，不过是取反
			// 	console.log(reg.test(str));
			// 	console.log(reg.test(str));
			// 	console.log(reg.test(str));
			// 	console.log(reg.test(str));
			// }
			// 查找lastIndex,非全局下lastIndex不生效
			// {
			// 	let str = `abcd`;//数字也属于单词字符
			// 	let reg = /\w/g; //同上，不过是取反
			// 	while(reg.test(str)){
			// 		console.log(reg.lastIndex); // 输出1,2,3,4
			// 	}
			// }
			// exec方法
			// let str = "LeeYaMaster";
			// let reg = /\w/g; //同上，不过是取反
			// // console.log(reg.exec(str)) // 注意，这里加了console.log之后，while里面的lastIndex是等于2，没加的话，等于1，说明exec还是有迭代的效果在里面。
			// while (reg.exec(str)) {
			// 	console.log(reg.lastIndex);
			// }
			// search方法,输出匹配到的下标,会忽略g这个标志，写不写都一样
			// let str = '123';
			// let index = str.search(/2/);
			// console.log(index)
			// match方法,如果没有g,只执行一次匹配,得到的结果和exec一样,其实就是调用的双方换了下位置而已。比起exec功能弱了一些，没有分组，也没告诉位置。
			// let str = '12321';
			// let result = str.match(/2/);
			// console.log(result);
			// split方法，切割字符串为数组
			// let str = 'a1b2c3d4e';
			// let result = str.split(/\d/);
			// console.log(result);
			// replace传入正则
			// let str = 'a1b1c1';
			// console.log(str.replace('1','2'));
			// let str1 = 'a1b1c1';
			// console.log(str1.replace(/\d/g, '2'));
			// replace传入方法
			// function四个参数,1匹配字符串,2分组,没有分组的话,就没有这个参数,3匹配项在字符串中的index,4原字符串
			// let str = 'a1b2c3d4e7';
			// let result = str.replace(/\d/g, (match, index, origin) => {
			// 	console.log("match=" + match); //match为匹配到的值
			// 	console.log("index=" + index); //index为匹配到的值的下标
			// 	return parseInt(match) + 1;
			// });
			// console.log(result)
			// replace传入方法,带有分组
			// let str = 'a1b2c3d4e7';
			// 可以匹配到1b2,3d4
			// let result = str.replace(/(\d)(\w)(\d)/g, (match, group1, group2, group3, index, origin) => {
			// 	console.log("origin="+ origin);
			// 	console.log("match=" + match); //match为匹配到的值
			// 	console.log("index=" + index); //index为匹配到的值的下标
			// 	console.log("group1=" + group1, "group2=" + group2, "group3=" + group3)
			// 	return group1 + group2;//如果是group1 + group2 + group3那么就等于它本身了
			// });
			// console.log(result);
		</script>
	</body>
</html>
